<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    

    <script>
        // 原型链 
        class Person{
            constructor(name,age){
                this.name = name;
                this.age = age
            }

            say(){
                console.log(this.name + ' - '  + this.age)
            }
        }
        var p1 = new Person("zkl","38")   // 实例化对象  
      
        console.log(p1)
        // 先去自己的构造器找    
        console.log(p1.name)
        // 如果没有 再去自己的 __proto__ 找  
        console.log(p1.age)
        // 如果就报错 
        p1.say()
        console.log(p1.nickname)

        // 官方强制规定了  Object.prototype.__proto__ = null 
        console.log(Object.prototype.__proto__)

        // 原型链  
        // 某一个对象去寻找一个 属性或者方法  先沿着对象自己的constructor 去寻找,  
        // 找到就先跳出操作  找不到就继续往上去找  找当前对象的__proto__ 原型对象 
        // 找到就先跳出操作  找不到就继续往上去找  可能找到当前的父类  再去父类寻找一次  参考前面2步 
        // 找到就先跳出操作  找不到就继续往上去找  => 父类的父类     再去父类寻找一次  参考前面2步 
        // 找到就先跳出操作  找不到就继续往上去找  Object  Object.prototype.__proto__  提示 null 或者 undefined

        // 原型链  根据这个链去查找元素  这个就是原型链  

        // 自己的.__proto__  => 父类.__proto__  => Object.__proto__ 

        // call apply bind   改变 this指向 
        // 继承  
    </script>
</body>
</html>